#ifndef PROCESS_H
#define PROCESS_H

#include<iostream>
#include<sstream>
#include<string>

using namespace std;

class Process {

	public:
		Process();
		Process(int pid, int burst, int arrival, int priority, int deadline, int io);
		void clone(Process p);
		~Process();
		
		void update_priority(int new_priority);
		void run_for(int);
		string to_string();
		bool has_arrived(int);
		bool is_done();
		void wait_at(int);
		bool age_up(int, int);
		bool operator==(Process);

		//Scheduler comparators
		bool hard_rts(Process, Process);
		bool soft_rts(Process, Process);
		bool mfqs(Process, Process);
		bool hws(Process, Process);
		
		//Getters
		int get_pid();
		int get_burst();
		int get_t_remain();
		int get_arrival();
		int get_priority();
		int get_orig_pri();
		int get_deadline();
		int get_io();
		int get_wait_start();

	public:
		int pid;
		int burst;
		int time_remaining;
		int arrival;
		int priority;
		int orig_priority;
		int deadline;
		int io;
		int wait_start;
};

#endif
